import { MockMethod } from "vite-plugin-mock"
import { resultError, resultSuccess, getRequestToken, requestParams, baseUrl } from "../_util"
export function createFakeUserList() {
  return [
    {
      userId: "1",
      username: "admin",
      realname: "管理员",
      avatar: "https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640",
      desc: "manager",
      password: "123456",
      token: "fakeToken1",
      homePath: "/dashboard/analysis",
      roles: [
        {
          roleName: "Super Admin",
          value: "super",
        },
      ],
    },
    {
      userId: "2",
      username: "lingyang",
      password: "123456",
      realname: "测试用户",
      avatar: "https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640",
      desc: "tester",
      token: "fakeToken2",
      homePath: "/dashboard/workbench",
      roles: [
        {
          roleName: "Tester",
          value: "test",
        },
      ],
    },
  ]
}

const fakeCodeList: any = {
  "1": ["1000", "3000", "5000"],

  "2": ["2000", "4000", "6000"],
}

export default [
  // mock user login
  {
    url: `${baseUrl}/sys/login`,
    timeout: 200,
    method: "post",
    response: ({ body }) => {
      const { username, password } = body
      const checkUser = createFakeUserList().find((item) => item.username === username && password === item.password)
      if (!checkUser) {
        return resultError("Incorrect account or password！")
      }
      const { userId, username: _username, token, realname, desc, roles } = checkUser
      return resultSuccess({
        roles,
        userId,
        username: _username,
        token,
        realname,
        desc,
      })
    },
  },
  {
    url: `${baseUrl}/sys/user/getUserInfo`,
    method: "get",
    response: (request: requestParams) => {
      const token = getRequestToken(request)
      if (!token) return resultError("Invalid token")
      const checkUser = createFakeUserList().find((item) => item.token === token)
      if (!checkUser) {
        return resultError("The corresponding user information was not obtained!")
      }
      return resultSuccess(checkUser)
    },
  },
  {
    url: `${baseUrl}/sys/permission/getPermCode`,
    timeout: 200,
    method: "get",
    response: (request: requestParams) => {
      const token = getRequestToken(request)
      if (!token) return resultError("Invalid token")
      const checkUser = createFakeUserList().find((item) => item.token === token)
      if (!checkUser) {
        return resultError("Invalid token!")
      }
      const codeList = fakeCodeList[checkUser.userId]

      return resultSuccess(codeList)
    },
  },
  {
    url: `${baseUrl}/sys/logout`,
    timeout: 200,
    method: "get",
    response: (request: requestParams) => {
      const token = getRequestToken(request)
      if (!token) return resultError("Invalid token")
      const checkUser = createFakeUserList().find((item) => item.token === token)
      if (!checkUser) {
        return resultError("Invalid token!")
      }
      return resultSuccess(undefined, { message: "Token has been destroyed" })
    },
  },
  {
    url: `${baseUrl}/sys/randomImage/1629428467008`,
    timeout: 200,
    method: "get",
    response: (request: requestParams) => {
      const result =
        ""
      return resultSuccess(result)
    },
  },
] as MockMethod[]
